package com.docmgmt.mvp.service;

import com.docmgmt.mvp.dto.FileVO;
import com.docmgmt.mvp.dto.TagVO;
import com.docmgmt.mvp.entity.TagEntity;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * <p>
 * 标签表 服务类
 * </p>
 *
 * @author Dora
 */
public interface TagService extends IService<TagEntity> {

    /**
     * 创建标签
     *
     * @param name   标签名称
     * @param color  标签颜色
     * @param userId 创建人ID
     * @return 标签VO
     */
    TagVO createTag(String name, String color, Long userId);

    /**
     * 删除标签
     *
     * @param tagId  标签ID
     * @param userId 用户ID
     */
    void deleteTag(Long tagId, Long userId);

    /**
     * 查询用户的所有标签
     *
     * @param userId 用户ID
     * @return 标签列表
     */
    List<TagVO> listUserTags(Long userId);

    /**
     * 为文件添加标签
     *
     * @param fileId 文件ID
     * @param tagIds 标签ID列表
     * @param userId 用户ID
     * @return 添加的标签列表
     */
    List<TagVO> addFileTag(Long fileId, List<Long> tagIds, Long userId);

    /**
     * 从文件移除标签
     *
     * @param fileId 文件ID
     * @param tagId  标签ID
     * @param userId 用户ID
     */
    void removeFileTag(Long fileId, Long tagId, Long userId);

    /**
     * 查询文件的所有标签
     *
     * @param fileId 文件ID
     * @return 标签列表
     */
    List<TagVO> listFileTags(Long fileId);

    /**
     * 按标签查询文件
     *
     * @param tagId  标签ID
     * @param userId 用户ID
     * @return 文件列表
     */
    List<FileVO> listFilesByTag(Long tagId, Long userId);
}
